Given two computers exchanging messages over a communications link where the messages contain encoded message elements, the two computers must agree on the encoding specification, and both must implement encoding and decoding procedures that produce an encoded message from message elements, and that produce decoded message elements equivalent to the originals from the encoded message. The problem arises when at least one of the computers has available implementations of at least one encoding specification not available on the other computer. To successfully communicate, the two computers must agree to use an encoding specification common to both.
When one computer sends a message to the other without knowing which encoding specification is common to both computers, the receiving computer will not understand the message if it is encoded using a specification the receiving computer does not implement, and as a result the communication attempt fails.
Current solutions involve marking the communications attempt as a failure when the receiving computer cannot decode the message from the sending computer. The receiving computer can simply ignore the undecipherable message, in which case the sending computer generally knows about the failure by detecting the absence of a response. The receiving computer can attempt to respond to the sending computer with an error message, which could itself be encoded using a specification the sending computer does not implement. When the sending computer detects the failure, it typically notifies the sending application, but in some situations this is not possible, e.g. when the sending application uses a one-to-many (multicast) feature and doesn't know who the receivers might be.
Recovery from the error involves notifying the application of the failure, if possible, and depending on the application to recover. The application might respond to the failure by encoding the message using a different specification and resending the message, by ignoring the error notification, or by entirely abandoning the attempt to communicate. All these require the application be written to deal with the failure of the receiving computer, and such code is both complex and not particularly relevant to the purpose of the application. In addition, recovery attempts consume the sending computer's resources without producing equivalent value, i.e., recovery attempts are counterproductive overhead processing.
What is required is a system, method and computer readable medium for improved communication of encoded messages.